<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    var names = ["abc", "cba", "nba"];

    // 版本一  直接定一个高阶函数
    //
    // for (var i = 0; i < names.length; i++) {
    //     console.log(names[i]);
    // }
    //
    // function wxyForEach(fn) {
    //     for (var i = 0; i < names.length; i++) {
    //         fn(names[i], i, names);
    //     }
    // }
    //
    // wxyForEach(function (item, index, names) {
    //     console.log("------", item, index, names);
    // });


    // 版本二  把对应的数组当做入参传到高阶函数中
    // function wxyForEach(fn, arr) {
    //     for (var i = 0; i < arr.length; i++) {
    //         fn(arr[i], i, arr);
    //     }
    // }
    //
    // wxyForEach(function (item, index, names) {
    //     console.log("------", item, index, names);
    // },names);
    //
    // wxyForEach(function (item, index, names) {
    //     console.log("------", item, index, names);
    // },["123","321","gga ","12gagag3",]);

    // 版本三 直接给数组加一个方法
    // 这个问题是 你还得给每一个数组加一个方法
    // 实际JS的做法是给Array的原型加了一个方法,所有Array就都能用forEach了
    // names.wxyForEach = function (fn) {
    //     for (var i = 0; i < this.length; i++) {
    //         fn(this[i], i, this)
    //     }
    // }
    // names.wxyForEach(function (item, index, names) {
    //     console.log("------", item, index, names)
    // });

    // 版本四 给Array的原型加一个方法
    // Array.prototype.wxyForEach = function (fn) {
    //     for (var i = 0; i < this.length; i++) {
    //         fn(this[i], i, this)
    //     }
    // }
    // names.wxyForEach(function(item,index,names){
    //     console.log(item,index,names)
    // })

    //自己实现一个find
    Array.prototype.wxyFind = function (fn){
        for (var i = 0; i < this.length; i++) {
            if(fn(this[i])){
                return this[i];
            }
        }
    }
    var findName = names.wxyFind(function (item){
        if(item === 'nba2') return true;
    })
    console.log("------",findName);

</script>

</body>
</html>